package com.xiaoc.bulldozer.common.service;

import java.util.List;

import com.xiaoc.bulldozer.common.dto.AccountBalanceDetailQueryDto;
import com.xiaoc.bulldozer.common.dto.AccountBalanceQueryDto;
import com.xiaoc.bulldozer.common.model.AccountBalance;
import org.apache.ibatis.annotations.Param;

/**
 * AccountBalance Service 接口
 * 
 * @author Danfo Yam
 * 
 * @date 2018-08-24 15:47:58
 */
public interface AccountBalanceService {

    /**
     * 根据条件查询AccountBalance数量
     
     * @param AccountBalanceQueryDto
     *
     * @return 满足查询条件的记录数量
     */
    public Integer getAccountBalanceCountByCondition(AccountBalanceQueryDto accountBalanceQueryDto);
    
    /**
     * 根据条件分页查询AccountBalance列表
     *
     * @param AccountBalanceQueryDto
     *
     * @return 满足查询条件的AccountBalance列表
     */
    public List<AccountBalance> getAccountBalanceListByCondition(AccountBalanceQueryDto accountBalanceQueryDto);
    
    /**
     * 根据Id获取AccountBalance
     * 
     * @param id
     *
     * @return AccountBalance对象
     */
    public AccountBalance getAccountBalanceById(Integer id);

    /**
     * 获取所有AccountBalance列表
     * 
     * @return AccountBalance列表
     */
    public List<AccountBalance> getAllAccountBalanceList();

    /**
     * 新增AccountBalance
     * 
     * @param accountBalance
     *
     * @return void
     */
    public void save(AccountBalance accountBalance);

    /**
     * 更新AccountBalance
     * 
     * @param accountBalance
     *
     * @return void
     */
    public void update(AccountBalance accountBalance);

    /**
     * 根据Id删除AccountBalance
     * 
     * @param id
     *
     * @return void
     */
    public void deleteById(Integer id);

    /**
     * 根据accountId,type 获取AccountBalance
     * @param userId
     * @param accountId
     * @param type
     * @return
     */
    public AccountBalance getAccountBalanceAccountIdAndType(Integer accountId, Integer type);

    /**
     * 更新余额
     * @param balance
     * @param updateTime
     * @param id
     */
    public void updateBalanceAndUpdateTimeById(Integer balance, long updateTime, Integer id);
    
    /**
     * 根据userId获取账户信息
     * 
     * @param userId
     * @return
     */
    public List<AccountBalance> getAccountBalanceListByUserId(Integer userId);
    
    /**
     * 根据userId,type 获取AccountBalance
     * @param userId
     * @param type
     * @return
     */
    public AccountBalance getAccountBalanceByUserIdAndType(Integer userId, Integer type);
    
    /**
     * 保存userId的AccountBalance, 如果账户不存在, 则新建账户, 如果账户已存在, 则修改账户余额
     * 
     * @param userId
     * @param fee
     * @param type 类型
     * @return
     */
    public AccountBalance saveAccountBalance(Integer userId, int fee, int type, int balanceDetailType);

}
